/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlet;

import Negocio.Archivo;
import Negocio.Bicicleta;
import Negocio.Foto;
import Negocio.Ruta;
import Negocio.Usuario;
import java.io.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.servlet.*;
import org.apache.commons.fileupload.disk.*;


/**
 *
 * @author JAVA
 */
public class subirArchivo extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    
    private static final String TEMPORAL_DIR = "temp";
    private static final String DESTINO_DIR = "dest";
    private File tmp;
    private String nombre;
    private String tipo;
    private String lugar;
    private String tiempo;
    private File des;
    private int id;
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        
        // Compruebo si las carpetas existen y si no las creo
        // ************************************************************
        Date fecha = new Date();
        
        String ruta = getServletContext().getRealPath(TEMPORAL_DIR);
        tmp = new File(ruta);
        if (!tmp.exists()) {
            tmp.mkdir();
        }
        
        ruta = getServletContext().getRealPath(DESTINO_DIR);
        des = new File(ruta);
        if (!des.exists()) {
            des.mkdir();
        }
        
        HttpSession sesion = request.getSession();        
        Usuario u = (Usuario) sesion.getAttribute("usuario");  
        
        DiskFileItemFactory dfif = new DiskFileItemFactory();
        dfif.setRepository(tmp);
        
        ServletFileUpload sfu = new ServletFileUpload(dfif);
        
        try {
            List datos = sfu.parseRequest(request);
            Iterator itr = datos.iterator();
            
            while (itr.hasNext()) {
                FileItem item = (FileItem) itr.next();
                
                if (!item.isFormField() && tipo.equals("fotoPerfil")) {
                    String[] arrStr = item.getName().split(new String ("\\\\"));
                    String nombreArchivo = null;
                    if(arrStr[arrStr.length - 1]==""){
                        request.setAttribute("mensaje", "No has introducido un archivo");                
                        request.getRequestDispatcher("perfilEditar.jsp").forward(request, response);
                    }
                    else{
                    
                    nombreArchivo = arrStr[arrStr.length - 1];                    
                    //para coger la extension y concatenarle el id del usuario sesion
                    String extension = nombreArchivo.substring(nombreArchivo.length()-4);
                    if(!extension.equals(".jpg") && !extension.equals(".png")){
                        request.setAttribute("mensaje", "No has introducido un archivo .jpg o .png");                
                        request.getRequestDispatcher("perfilEditar.jsp").forward(request, response);
                    } else{
                        
                    String identificador = u.getId()+"";                    
                    nombreArchivo = identificador+extension;
                    //mete el archivo en la ruta
                    File archivo = new File(des+"\\fotoPerfil",nombreArchivo);
                    item.write(archivo);
                    //aora vamos a meter la ruta en la base de datos del usuario y actualizarlo
                    //String rutaArchivo = "dest\\\\fotoPerfil\\\\"+nombreArchivo;
                    String rutaArchivo = nombreArchivo;
                    
                    u.setRutaFoto(rutaArchivo);
                    u.actualizarUsuario();
                    
                    Usuario uEventual = Usuario.seleccionarUsuario(u.getId());
                    sesion.setAttribute("usuario", uEventual);
                    sesion.setAttribute("usuarioShow", uEventual);
            
                    response.sendRedirect("perfil.jsp");
                    }
                    }
                    
                } else if (!item.isFormField() && tipo.equals("foto")){
                    String[] arrStr = item.getName().split(new String ("\\\\"));
                    String nombreArchivo = null;
                    if(arrStr[arrStr.length - 1]==""){
                        request.setAttribute("mensaje", "No has introducido un archivo");                
                        request.getRequestDispatcher("examinarFoto.jsp").forward(request, response);
                    }
                    else{
                    nombreArchivo = arrStr[arrStr.length - 1];
                    Archivo a = new Foto(u,fecha,nombre,"");                        
                    a.crearArchivo(); 
                    //para coger la extension y concatenarle el id del usuario sesion
                    String extension = nombreArchivo.substring(nombreArchivo.length()-4);
                    
                    if(!extension.equals(".jpg") && !extension.equals(".png")){
                        request.setAttribute("mensaje", "No has introducido un archivo .jpg o .png");                
                        request.getRequestDispatcher("examinarFoto.jsp").forward(request, response);
                    } else{                 
                    
                            String identificador = a.getId()+"";                    
                            nombreArchivo = identificador+extension;                    
                   
                            //mete el archivo en la ruta
                            File archivo = new File(des+"\\fotos",nombreArchivo);
                            item.write(archivo);
                            //aora vamos a meter la ruta en la base de datos del usuario y actualizarlo
                            //String rutaArchivo = "dest\\\\fotos\\\\"+nombreArchivo;
                            String rutaArchivo = nombreArchivo;

                            a.setRutaArchivo(rutaArchivo);
                            a.actualizarArchivo();

                            response.sendRedirect("foto.jsp");
                    }
                    }
                }else if(!item.isFormField() && tipo.equals("ruta")){
                    
                    String[] arrStr = item.getName().split(new String ("\\\\"));                    
                    String nombreArchivo = null;                    
                     if(arrStr[arrStr.length - 1]==""){
                        request.setAttribute("mensaje", "No has introducido un archivo .kml");                
                        request.getRequestDispatcher("examinarRuta.jsp").forward(request, response);
                    }
                    else{
                    nombreArchivo = arrStr[arrStr.length - 1];
                    String extension = nombreArchivo.substring(nombreArchivo.length()-4);
                    
                    if(!extension.equals(".kml")){
                        request.setAttribute("mensaje", "No has introducido un archivo .kml");                
                        request.getRequestDispatcher("examinarRuta.jsp").forward(request, response);
                    } else{
                    
                    Archivo a = new Ruta(u,fecha,nombre,nombreArchivo,lugar,tiempo);                        
                    a.crearArchivo(); 
                    //para coger la extension y concatenarle el id del usuario sesion
                   
                    String identificador = a.getId()+"";                    
                    nombreArchivo = identificador+extension;
                    //String identificador = a.getId()+"";                    
                    //nombreArchivo = identificador+extension;
                    //mete el archivo en la ruta
                    File archivo = new File(des+"\\rutas",nombreArchivo);
                    item.write(archivo); 
                    
                    a.setRutaArchivo(nombreArchivo);
                    a.actualizarArchivo();
            
                    response.sendRedirect("ruta.jsp");
                    }
                    
                    }
                    
                }else if(!item.isFormField() && tipo.equals("fotoPerfilBici")){
                    
                   String[] arrStr = item.getName().split(new String ("\\\\"));
                    String nombreArchivo = null;
                    if(arrStr[arrStr.length - 1].equals("")){
                        request.setAttribute("mensaje", "No has introducido un archivo");                
                        request.getRequestDispatcher("editarBicicleta.jsp").forward(request, response);
                    }
                    else{
                    
                    nombreArchivo = arrStr[arrStr.length - 1];                    
                    //para coger la extension y concatenarle el id del usuario sesion
                    String extension = nombreArchivo.substring(nombreArchivo.length()-4);
                    if(!extension.equals(".jpg") && !extension.equals(".png")){
                        request.setAttribute("mensaje", "No has introducido un archivo .jpg o .png");                
                        request.getRequestDispatcher("editarBicicleta.jsp").forward(request, response);
                    } else{
                        
                    String identificador = id+"";                    
                    nombreArchivo = identificador+extension;
                    //mete el archivo en la ruta
                    File archivo = new File(des+"\\fotoPerfilBici",nombreArchivo);
                    item.write(archivo);
                    //aora vamos a meter la ruta en la base de datos del usuario y actualizarlo
                    //String rutaArchivo = "dest\\\\fotoPerfil\\\\"+nombreArchivo;
                    String rutaArchivo = nombreArchivo;
                    
                    Bicicleta b = Bicicleta.seleccionarBicicleta(id);
                    b.setRutafoto(rutaArchivo);                    
                    b.actualizarBicicleta();
            
                    
                    Usuario uEventual = Usuario.seleccionarUsuario(u.getId());
                    sesion.setAttribute("usuario", uEventual);
                    sesion.setAttribute("usuarioShow", uEventual);
                    
                    response.sendRedirect("bicicleta.jsp");
                    }
                    }
                    
                }
                else {
                    //Nombre del campo
                    if (item.getFieldName().equals("titulo")) {
                        nombre = item.getString();
                    }else{
                        if(item.getFieldName().equals("tipo")){
                            tipo = item.getString();
                        }else{
                            if(item.getFieldName().equals("lugar")){
                                lugar = item.getString();
                            }else{
                                if(item.getFieldName().equals("tiempo")){
                                    tiempo = item.getString();
                                }else{
                                    if(item.getFieldName().equals("id")){
                                        id = Integer.parseInt(item.getString());
                                    }
                                }
                            }
                                
                        }
                    }
                }
                
            }


        } catch (FileUploadException ex) {
            Logger.getLogger(subirArchivo.class.getName()).log(Level.SEVERE, null, ex);
        }catch (Exception ex) {
            Logger.getLogger(subirArchivo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
